/*
 * ServerConfig.h
 *
 */

#ifndef SERVERCONFIG_H_
#define SERVERCONFIG_H_

#include "Socket.h"
#include "Configuraciones.h"


/**
 * Objeto con la configuracion del servidor. El configurador modifica los
 * atributos de este objeto y lo persiste en un archivo XML. El servidor
 * levanta este objeto del archivo XML y usa sus atributos como parametros
 * de la configuracion
 */
class ServerConfig : private Configuraciones {
	public:
		ServerConfig(std::string nomArchXML);
		virtual ~ServerConfig();

		/**
		 * Devuelve el puerto del servidor web
		 */
		Port getWebPort() const;

		/**
		 * Devuelve el puerto de control del servidor
		 */
		Port getCtrlPort() const;

		/**
		 * Devuelve la máxima cantidad de conexiones simultaneas permitidas
		 */
		unsigned short int getMaxSimulConn() const;

		/**
		 * Devuelve la máxima cantidad de conexiones por cliente permitidas
		 */
		unsigned short int getMaxClientConn() const;

		/**
		 * Devuelve el path del directorio raiz del servidor web
		 */
		const std::string& getRootPath() const;

		/**
		 * Devuelve el content type asociado a la extension
		 */
		std::string getStaticType(const std::string& extension) const;

		/**
		 * Devuelve el comando asociado a la extension
		 */
		std::string getDynamicType(const std::string& extension) const;

		/**
		 * Devuelve el manejador de error asociado al codigo de error
		 */
		std::string getErrorHandler(const std::string& code) const;

		/**
		 * Devuelve verdadero si el flag de protección fue activado.
		 */
		bool getProtectionFlag() const;

		/**
		 * Indica si el usuario/pass estan autorizados
		 */
		bool isUserAuthorized(const std::string& user,
				const std::string& pass) const;

		/**
		 * Devuelve el valor de timeout seteado
		 */
		unsigned short int getTimeout() const;
};

#endif /* SERVERCONFIG_H_ */
